package com.ztc.ZtcTransportArea.service;

import com.aqgj.SysArea.bean.SysArea;
import com.aqgj.SysArea.dao.SysAreaDao;
import com.aqgj.util.JsonWrapper;
import com.ztc.ZtcTransport.bean.ZtcTransport;
import com.ztc.ZtcTransport.dao.ZtcTransportDao;
import com.ztc.ZtcTransportArea.bean.ZtcTransportArea;
import com.ztc.ZtcTransportArea.dao.ZtcTransportAreaDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service("ZtcTransportArea")
public class ZtcTransportAreaManager {
    @Autowired
    ZtcTransportAreaDao ztcTransportAreaDao;
    @Autowired
    SysAreaDao sysAreaDao;
    @Autowired
    ZtcTransportDao ztcTransportDao;


    public String save(ZtcTransportArea ztcTransportArea) {
        ztcTransportAreaDao.save(ztcTransportArea);
        return ztcTransportArea.getId();
    }

    /**
     * 根据第三级行政区域id获取该区域管理公司信息.
     *
     * @param areaId 第三级行政区域id
     * @return 该区域该公司
     */
    public ZtcTransport getZtaByAreaId(String areaId) {
        ZtcTransportArea ztcTransportArea = ztcTransportAreaDao.findUniqueBy("areaId", areaId);//地区公司关系
        if (ztcTransportArea == null) {
            String id = sysAreaDao.get(sysAreaDao.get(areaId).getPid()).getPid();//三级行政区划的省级区划id
            ZtcTransportArea ztcTransportArea1 = ztcTransportAreaDao.findUniqueBy("areaId", id);//省级管理公司关系
            if (ztcTransportArea1 == null) {
                return ztcTransportDao.findUniqueBy("type", "0");//总公司
            } else {
                return ztcTransportDao.get(ztcTransportArea1.getTransportId());
            }
        } else {
            return ztcTransportDao.get(ztcTransportArea.getTransportId());
        }
    }

    /**
     * 保存省级/地级公司所管理行政区域关系.
     *
     * @param code 行政区域代码
     * @param cid  公司id
     * @return 是否保存
     */
    public HashMap<String, Object> saveZtcArea(String code, String cid) {
        String[] arraryString = code.split(",");
        List<ZtcTransportArea> list = ztcTransportAreaDao.findBy("transportId", cid);
        if (arraryString.length > 0) {
            for (String ce : arraryString) {
                SysArea sysArea = sysAreaDao.findUniqueBy("code", ce);//所选择提交区域code
                ZtcTransportArea ztcTransportArea = ztcTransportAreaDao.findUniqueBy("areaId", sysArea.getId());//提交区域对应区域关系表
                if (ztcTransportArea != null) {
                    if (list.size() > 0) {
                        for (ZtcTransportArea z:list) {//循环该公司的对应关系表
                            if(!ztcTransportArea.getTransportId().equals(z.getTransportId())){//如果公司相同不做处理
                                return JsonWrapper.failureWrapperMsg("所选区域‘"+sysArea.getName()+"’已被管理！");
                            }
                        }
                    }else{
                        return JsonWrapper.failureWrapperMsg("所选区域‘"+sysArea.getName()+"’已被管理！");
                    }
                }
            }
        }
        ZtcTransportArea ztcTransportArea = null;
        if (list.size() > 0) {
            for (ZtcTransportArea z:list) {
                ztcTransportAreaDao.removeById(z.getId());
            }
        }
        if(arraryString.length>0){
            for (String ce : arraryString) {
                ztcTransportArea = new ZtcTransportArea();
                ztcTransportArea.setTransportId(cid);
                ztcTransportArea.setAreaId(sysAreaDao.findUniqueBy("code",ce).getId());
                this.save(ztcTransportArea);
            }
        }
        return JsonWrapper.successWrapper("行政管理区域设置成功!");
    }


    public ZtcTransportArea findUniqueBy(String propertyName, Object value) {
        return ztcTransportAreaDao.findUniqueBy(propertyName, value);
    }

    public List<ZtcTransportArea> findBy(String propertyName, Object value) {
        return ztcTransportAreaDao.findBy(propertyName, value);
    }

    //获取存在管理区域的省份区域
    public List<SysArea> getExitCompanyOfArea() {
        return ztcTransportAreaDao.getExitCompanyOfArea();
    }


    //获取存在管理区域的省公司信息
    public List<ZtcTransport> getAreaCompany(String areaId,Integer type) {
        return ztcTransportAreaDao.getAreaCompany(areaId,type);
    }

    //获取存在管理区域的地级区域
    public List<SysArea> getExitCompanyOfAreaList2(String areaId) {
        return ztcTransportAreaDao.getExitCompanyOfAreaList2(areaId);
    }

    //首页获取本公司管理区域关系及运营公司数量
    public Map getAreaRelationByCompanyId(String tid,Integer type) {
        return ztcTransportAreaDao.getAreaRelationByCompanyId(tid,type);
    }
}
